/*
 * Activiti Modeler component part of the Activiti project Copyright 2005-2014
 * Alfresco Software, Ltd. All rights reserved.
 * 
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 * 
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 * 
 * You should have received a copy of the GNU Lesser General Public License
 * along with this library; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */

/*
 * Assignment
 */
var KisBpmAssignmentCtrl = ['$scope', '$modal', function($scope, $modal) {

	// Config for the modal window
	var opts = {
		template : 'editor-app/configuration/properties/assignment-popup.html?version='
				+ Date.now(),
		scope : $scope
	};

	// Open the dialog
	$modal(opts);
}];

var KisBpmAssignmentPopupCtrl = ['$scope', function($scope) {

	// Put json representing assignment on scope
	if ($scope.property.value !== undefined && $scope.property.value !== null
			&& $scope.property.value.assignment !== undefined
			&& $scope.property.value.assignment !== null) {
		$scope.assignment = $scope.property.value.assignment;
	} else {
		$scope.assignment = {};
	}

	if ($scope.assignment.candidateUsers == undefined
			|| $scope.assignment.candidateUsers.length == 0) {
		$scope.assignment.candidateUsers = [{
					value : ''
				}];
	}

	// Click handler for + button after enum value
	var userValueIndex = 1;
	$scope.addCandidateUserValue = function(index) {
		$scope.assignment.candidateUsers.splice(index + 1, 0, {
					value : 'value ' + userValueIndex++
				});
	};

	// Click handler for - button after enum value
	$scope.removeCandidateUserValue = function(index) {
		$scope.assignment.candidateUsers.splice(index, 1);
	};

	if ($scope.assignment.candidateGroups == undefined
			|| $scope.assignment.candidateGroups.length == 0) {
		$scope.assignment.candidateGroups = [{
					value : ''
				}];
	}

	var groupValueIndex = 1;
	$scope.addCandidateGroupValue = function(index) {
		$scope.assignment.candidateGroups.splice(index + 1, 0, {
					value : 'value ' + groupValueIndex++
				});
	};

	// Click handler for - button after enum value
	$scope.removeCandidateGroupValue = function(index) {
		$scope.assignment.candidateGroups.splice(index, 1);
	};

	$scope.save = function() {

		$scope.property.value = {};
		handleAssignmentInput($scope);
		$scope.property.value.assignment = $scope.assignment;

		$scope.updatePropertyInModel($scope.property);
		$scope.close();
	};

	// Close button handler
	$scope.close = function() {
		handleAssignmentInput($scope);
		$scope.property.mode = 'read';
		$scope.$hide();
	};

	var handleAssignmentInput = function($scope) {
		if ($scope.assignment.candidateUsers) {
			var emptyUsers = true;
			var toRemoveIndexes = [];
			for (var i = 0; i < $scope.assignment.candidateUsers.length; i++) {
				if ($scope.assignment.candidateUsers[i].value != '') {
					emptyUsers = false;
				} else {
					toRemoveIndexes[toRemoveIndexes.length] = i;
				}
			}

			for (var i = 0; i < toRemoveIndexes.length; i++) {
				$scope.assignment.candidateUsers.splice(toRemoveIndexes[i], 1);
			}

			if (emptyUsers) {
				$scope.assignment.candidateUsers = undefined;
			}
		}

		if ($scope.assignment.candidateGroups) {
			var emptyGroups = true;
			var toRemoveIndexes = [];
			for (var i = 0; i < $scope.assignment.candidateGroups.length; i++) {
				if ($scope.assignment.candidateGroups[i].value != '') {
					emptyGroups = false;
				} else {
					toRemoveIndexes[toRemoveIndexes.length] = i;
				}
			}

			for (var i = 0; i < toRemoveIndexes.length; i++) {
				$scope.assignment.candidateGroups.splice(toRemoveIndexes[i], 1);
			}

			if (emptyGroups) {
				$scope.assignment.candidateGroups = undefined;
			}
		}
	};
}];